﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using LojaVirtual.Comuns.Produtos;
using LojaVirtual.Infra;
using LojaWeb.Models;
using LojaVirtual.Comuns.Clientes;
using LojaWeb.ViewModels;

namespace LojaWeb.Controllers
{ 
    public class ProdutoLojaController : Controller
    {
		private UnitOfWork db;

		public ProdutoLojaController()
		{
			db = new UnitOfWork();
		}
        
		public ViewResult Index()
        {
			var produtos = db.Produtos.Recuperar();

			var busca = Busca(string.Empty, string.Empty, null);

            return busca;
        }

		public ViewResult Busca(string palavraChaveAtual = "", string palavraChave = "", int? categoriaID = null)
		{
			Categoria categoriaBusca = null;
			if(categoriaID.HasValue)
				categoriaBusca = db.Categorias.Recuperar(categoriaID.Value);

			var produtos = db.Produtos.Recuperar();
			produtos = produtos.Where(p => p.Nome.ToUpper().Contains(palavraChave.ToUpper()));

			if (categoriaID.HasValue)
				produtos = produtos.Where(p => p.Categoria.ID == categoriaID);

			PopulateCategoryDropDown(categoriaID);

			var produtoVM = new ProdutoViewModel();
			produtoVM.CategoriaBusca = categoriaBusca;
			produtoVM.PalavraChaveBusca = palavraChave;
			produtoVM.Produtos = produtos.ToList();

			return View("Index", produtoVM);
		}

		public void PopulateCategoryDropDown(object selectedModel = null)
		{
			var categorias = db.Categorias.Recuperar();
			ViewBag.CategoriaID = new SelectList(categorias, "ID", "Nome", selectedModel);
		}

        public ViewResult Details(int id)
        {
			Produto produto = db.Produtos.Recuperar(id);
            return View(produto);
        }

        public ViewResult Comprar(int id)
        {
            
            return View();
        }

		private void PopulatePedidoDropDownList(object categoriaSelecionada = null)
		{
			var categorias = db.Categorias.Recuperar().OrderBy(i => i.Nome);
			ViewBag.categoriaID = new SelectList(categorias, "ID", "Nome", categoriaSelecionada);
		}


        protected override void Dispose(bool disposing)
        {
			db.Dispose();
            base.Dispose(disposing);
        }
    }
}